//
//  CXSqliteModelTool.h
//  sqlite的基本封装
//
//  Created by chuxu on 2016/12/3.
//  Copyright © 2016年 chuxu. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef enum : NSUInteger {
    CXSqliteModelToolRelationTypeEqual,// =
    CXSqliteModelToolRelationTypeGreater,// >
    CXSqliteModelToolRelationTypeLess,// <
    CXSqliteModelToolRelationTypeEG,// >=
    CXSqliteModelToolRelationTypeEL,// <=
    CXSqliteModelToolRelationTypeNE,// !=
} CXSqliteModelToolRelationType;


typedef enum : NSUInteger {
    CXSqliteModelToolNAONot,// 非
    CXSqliteModelToolNAOAnd,// 且
    CXSqliteModelToolNAOOr,// 或
} CXSqliteModelToolNAO;




@interface CXSqliteModelTool : NSObject



#pragma mark - 创建/保存/更新

/**
 创建表格

 @param cls 对象类
 @param uid 用户ID,绑定用户用  可为nil
 @return 是否创建成功 YES 成功 NO 失败
 */
+ (BOOL)cx_createTableWithModelClass: (Class)cls withUID: (NSString *)uid;


/**
 保存模型(更新模型)

 @param model 对象
 @param uid 用户ID,绑定用户用  可为nil
 @return 是否保存(更新)成功 YES 成功 NO 失败
 */
+ (BOOL)cx_saveModel: (id)model uid: (NSString *)uid;




#pragma mark - 查询

/**
 根据类名获取实例数组

 @param cls 类名
 @param uid 用户ID,绑定用户用  可为nil
 @return 实例数组
 */
+ (NSArray *)cx_queryAllModels:(Class)cls uid: (NSString *)uid;

/**
 单条件获取实例数组

 @param cls 类名
 @param key 查询条件
 @param relation 关系语句
 @param value 依据值
 @param uid 用户ID,绑定用户用  可为nil
 @return 实例数组
 */
+ (NSArray *)cx_queryModels:(Class)cls key: (NSString *)key relation: (CXSqliteModelToolRelationType)relation value: (id)value uid: (NSString *)uid;

/**
 多条件获取实例数组
 
 @param cls 类名
 @param keys 查询条件数组
 @param relations 关系语句数组
 @param values 依据值数组
 @param uid 用户ID,绑定用户用  可为nil
 @return 实例数组
 */
+ (NSArray *)cx_queryModels:(Class)cls keys: (NSArray *)keys relations: (NSArray *)relations values: (NSArray *)values nao: (NSArray *)naos uid: (NSString *)uid;

/**
 根据sql语句获取实例数组

 @param cls 类名
 @param sql sql语句
 @param uid 用户ID,绑定用户用  可为nil
 @return 实例数组
 */
+ (NSArray *)cx_queryModels:(Class)cls sql: (NSString *)sql uid: (NSString *)uid;



#pragma mark - 删除


/**
 根据类名删除实例

 @param model 实例
 @param uid 用户ID,绑定用户用  可为nil
 @return 是否删除成功 YES 成功 NO 失败
 */
+ (BOOL)cx_deleteModel: (id)model uid: (NSString *)uid;

/**
 根据类名和条件删除相应实例

 @param cls 类名
 @param key 条件
 @param relation 关系
 @param value 依据值
 @param uid 用户ID,绑定用户用  可为nil
 @return 是否删除成功 YES 成功 NO 失败
 */
+ (BOOL)cx_deleteModel:(Class)cls key: (NSString *)key relation: (CXSqliteModelToolRelationType)relation value: (id)value uid: (NSString *)uid;

/**
 根据类名和条件数组删除相应实例

 @param cls 类名
 @param keys 条件数组
 @param relations 关系数组
 @param values 依据值数组
 @param naos 条件关系数组
 @param uid 用户ID,绑定用户用  可为nil
 @return 是否删除成功 YES 成功 NO 失败
 */
+ (BOOL)cx_deleteModel:(Class)cls keys: (NSArray *)keys relations: (NSArray *)relations values: (NSArray *)values nao: (NSArray *)naos uid: (NSString *)uid;

/**
 根据sql语句数组

 @param sql sql语句
 @param uid 用户ID,绑定用户用  可为nil
 @return 是否删除成功 YES 成功 NO 失败
 */
+ (BOOL)cx_deleteWithSql: (NSString *)sql uid: (NSString *)uid;



@end
